home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / comms / other / zelador / sources / zeladorarexxinterface.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-06  |  4.3 KB  |  141 lines

  1. #include <clib/exec_protos.h>
  2. #include <clib/dos_protos.h>
  3. #include <exec/exec.h>
  4. #include <dos/dos.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include "ZeladorAREXXinterface.h"
  9.  
  10. /* variáveis desse trecho..    */
  11. /* long int CodRetorno;     código de retorno do último comando Execute (....)    */
  12. char *pEnvVariavel;        /* usado p/ armazenar código de retorno do rexx    */
  13. /* anteriormente definido como 10    */
  14. #define tamanhoEnvVariavel 256
  15. #define CodRetornoNulo 65535
  16. #define StrCodRetornoNulo "65535"
  17. char NomeEnvVariavel[30];    /* nome da variavel que irá armazenar o valor acima    */
  18.  
  19. /* 0 - ok   <>0 - erro. não inicializado.    */
  20. int InicializaREXX (void)
  21. {
  22.     /* ATENCAO -- aqui deveria gerar um ID único (caso se rode 2x Zelador)    */
  23.     /* chuncho temporário    */
  24.     strcpy (NomeEnvVariavel, "ZEL_00000000"); /* <--- aqui o chuncho    */
  25.     if (!(pEnvVariavel = AllocVec (tamanhoEnvVariavel, MEMF_PUBLIC)))
  26.         return(1);
  27.  
  28.     /*    CodRetorno = 0; (agora não é mais uma variável normal C)    */
  29.     strcpy (pEnvVariavel, "0");
  30.     SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  31.  
  32.     return (0);
  33. }
  34.  
  35. void EnviaComandoREXX (char * HostDestino, char * Comando)
  36. {
  37.     char frasetemp [255] = "run >NIL: execute >NIL: scrp \"";
  38.  
  39.     /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536"    */
  40.     strcpy (pEnvVariavel, StrCodRetornoNulo);
  41.     SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  42.  
  43.     strcat (&frasetemp[0], &NomeEnvVariavel[0]);    /* ZEL_xxxxxxxx    */
  44.     strcat (&frasetemp[0], "\" \"ADDRESS ");
  45.     strcat (&frasetemp[0], HostDestino);
  46.     strcat (&frasetemp[0], " ");
  47.     strcat (&frasetemp[0], Comando);
  48.     strcat (&frasetemp[0], ";exit RC\"");
  49.     
  50.     system (&frasetemp[0]);
  51. }
  52.  
  53. /* usado pelo
  54.      int VerificaSeProgsNaMem (void)
  55.     no Zelador_Nucleo.c    */
  56. long int EnviaEEsperaComandoREXX (char * HostDestino, char * Comando)
  57. {
  58.     char frasetemp [255] = "execute >NIL: scrp \"";
  59.  
  60.     /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536"    */
  61.     strcpy (pEnvVariavel, StrCodRetornoNulo);
  62.     SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  63.  
  64.     strcat (&frasetemp[0], &NomeEnvVariavel[0]);    /* ZEL_xxxxxxxx    */
  65.     strcat (&frasetemp[0], "\" \"ADDRESS ");
  66.     strcat (&frasetemp[0], HostDestino);
  67.     strcat (&frasetemp[0], " ");
  68.     strcat (&frasetemp[0], Comando);
  69.     strcat (&frasetemp[0], ";exit RC\"");
  70.     
  71. /*    printf ("Comando enviado:\n%s\n", frasetemp);*/
  72.     
  73.     system (&frasetemp[0]);
  74.     return (CodRetorno());
  75. }
  76.  
  77. /* envia comando p/o YAM e espera conclusão    */
  78. /* dados: comando, pointer p/ string e tamanho do buffer    da string    */
  79. /* se o pointer para saida for nulo, não escreve nada de saida    */
  80. void EnviaComandoYAM (char * Comando, char * StringSaida, int TamBuff)
  81. {
  82.     char frasetemp [255] = "rx >NIL: \"OPTIONS RESULTS;";
  83.  
  84.     /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536"    */
  85.     strcpy (pEnvVariavel, StrCodRetornoNulo);
  86.     SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  87.  
  88.     strcat (&frasetemp[0], "ADDRESS YAM;");
  89.     strcat (&frasetemp[0], Comando);
  90.     strcat (&frasetemp[0], ";ADDRESS command setenv ");
  91.     strcat (&frasetemp[0], &NomeEnvVariavel[0]);    /* ZEL_xxxxxxxx    */
  92.     strcat (&frasetemp[0], " RESULT\"");
  93.     
  94.     system (&frasetemp[0]);
  95. /*    return (CodRetorno());*/
  96.  
  97.     if (StringSaida)    /* se StringSaida<>0 colocar resultado nela    */
  98.         GetVar (NomeEnvVariavel, StringSaida, TamBuff, GVF_GLOBAL_ONLY|LV_VAR);
  99.  
  100.     /* resseta o código de retorno, caso o comando tenha dado erro e, assim, não alterado a variável    */
  101.     strcpy (pEnvVariavel, "0");
  102.     SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  103. }
  104.  
  105.  
  106. /* retorna 65535 se o comando ainda não voltou */
  107. long int CodRetorno (void)
  108. {
  109.     char tempEnv[tamanhoEnvVariavel];
  110.     long int tempCodRet;
  111.  
  112.     /*    return (CodRetorno);*/
  113.     GetVar (NomeEnvVariavel, tempEnv, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  114.     tempCodRet = strtol (tempEnv, NULL, 10);
  115.  
  116.     return (tempCodRet);
  117. }
  118.  
  119. void FechaREXX (void)
  120. {
  121.     /* apaga a variável environment, não é mais necessária    */
  122.     DeleteVar (NomeEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
  123.     FreeVec (pEnvVariavel);
  124. }
  125.  
  126. /* executa comando CLI dado o comando em si e espera 0-não 1-sim    */
  127. void ExecutaComandoCLI (char * comandocli, int espera)
  128. {
  129.     char frasetemp [255] = "run ";
  130.  
  131.     if (!(espera))
  132.     {
  133.         strcat (&frasetemp[0], comandocli);
  134.         system (&frasetemp[0]);
  135.     }
  136.     else
  137.         system (comandocli);
  138. }
  139.  
  140.  
  141.